function getDate1(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('data1')
        },1000)
    })
}

function getDate2(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('data2')
        },1000)
    })
}

function getDate3(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('data3')
        },1000)
    })
}

function *test(){
    // 返回的是一个promise对象
    let result1=yield getDate1();
    console.log(result1)
    let result2=yield getDate2(result1);
    console.log(result2)
    let result3=yield getDate3(result2)
    console.log(result3)
}
// test()是一个生成器对象 Object [Generator] {}

// 递归执行
function run(fn){
    let generatorObj=fn()
    function next(data){
        let result=generatorObj.next(data) //生成器对象内部的方法
        if(!result.done){
            result.value.then(res=>{
                next(res)                  //自己定义的
            })
        }else{
            return result.value
        }
    }
    next()
}

run(test)